package com.ruifu.doc.controller;


import com.baomidou.mybatisplus.extension.api.R;
import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.fhzncloud.cloud.common.security.util.SecurityUtils;
import com.ruifu.common.vo.PageResultVO;
import com.ruifu.common.vo.ResultVO;
import com.ruifu.doc.dto.docc.DmDoccDTO;
import com.ruifu.doc.service.DmDoccService;
import com.ruifu.doc.vo.docc.DmDoccVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 文档类型控制层
 *
 * @author nyr
 * @create 2019/8/26
 */
@RestController
@CrossOrigin
@RequestMapping("/dmDocc")
public class DmDoccController {

    @Autowired
    private DmDoccService dmDoccService;
    /**
     * 用于存储登陆人信息
     */
    private CloudUser cloudUser;

    /**
     * 通过url请求方法之前,调用该方法获取登陆人信息
     */
    @ModelAttribute
    public void before() {
        cloudUser= SecurityUtils.getUser();
    }

    /**
     * 保存文档类型
     *
     * @param dmDoccDTO 文档类型传输对象
     * @return
     */
    @PostMapping(value = "/insert")
    public ResultVO insert(@RequestBody DmDoccDTO dmDoccDTO) {
        try {
            dmDoccService.insert(dmDoccDTO, cloudUser);
            return new ResultVO(true, "新建成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultVO(false, "新建失败");
        }
    }

    /**
     * 根据文档类型Id修改项目类型
     *
     * @param dmDoccDTO 文档类型传输对象
     * @return
     */
    @PostMapping(value = "/updateById")
    public ResultVO updateById(@RequestBody DmDoccDTO dmDoccDTO) {
        try {
            dmDoccService.updateById(dmDoccDTO, cloudUser);
            return new ResultVO(true, "修改成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultVO(false, "修改失败");
        }
    }

    /**
     * 根据文档Id进行删除
     *
     * @param dcDoccId 文档类型Id
     * @return
     */
    @GetMapping(value = "/deleteById")
    public ResultVO deleteById(Integer dcDoccId) {
        //处理逻辑
        try {
            dmDoccService.deleteById(dcDoccId, cloudUser);
            return new ResultVO(true, "删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultVO(false, e.toString());
        }
    }

    /**
     * 批量删除
     *
     * @param dcDoccIds 文档类型Id数组
     * @return
     */
    @PostMapping(value = "/delete")
    public ResultVO delete(@RequestBody Integer[] dcDoccIds) {
        //处理逻辑
        try {
            dmDoccService.delete(dcDoccIds, cloudUser);
            return new ResultVO(true, "删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new ResultVO(false, "删除失败");
        }
    }

    /**
     * 根据Id查询文档类型
     *
     * @param dcDoccId 文档类型编号
     * @return
     */
    @GetMapping(value = "/findById")
    public DmDoccVO findById(Integer dcDoccId) {
        return dmDoccService.findById(dcDoccId);
    }

    /**
     * 根据文档类型代号查询是否存在
     *
     * @param dcDoccCode 文档类型代号
     * @return
     */
    @GetMapping(value = "/findByDcDoccCode")
    public ResultVO findByDcDoccCode(String dcDoccCode) {
        if (dmDoccService.findByDcDoccCode(dcDoccCode, cloudUser)) {
            return new ResultVO(true, "文档类型代号查询不存在");
        } else {
            return new ResultVO(false, "文档类型代号查询已存在");
        }
    }

    /**
     * 联合查询
     *
     * @param pageNum   当前页码
     * @param pageSize  每页大小
     * @param dmDoccDTO 文档类型传输对象
     * @return
     */
    @PostMapping(value = "/findByQuery/{pageNum}/{pageSize}")
    public PageResultVO findByQuery(
            @PathVariable("pageNum") int pageNum,
            @PathVariable("pageSize") int pageSize,
            @RequestBody(required = false) DmDoccDTO dmDoccDTO) {
        //校验当前页码是否合理
        pageNum = pageNum <= 0 ? 1 : pageNum;
        //校验每页大小是否合理
        pageSize = pageSize < 5 ? 5 : pageSize;
        return dmDoccService.findByQuery(pageNum, pageSize, dmDoccDTO, cloudUser);
    }

    /**
     * 查询文档类别类型
     *
     * @return
     */
    @GetMapping(value = "/findAllDcDoccName")
    public List<DmDoccVO> findAllDcDoccName() {
        return dmDoccService.findAllDcDoccName(cloudUser);
    }

    /**
     * 新增默认文档类型  一个账套有且尽有一个 同时校验
     */
    @GetMapping(value = "/insertDefaultType/{dcDoccId}")
    @ApiOperation(value = "新增默认文档类型", notes = "传入参数为文档类型id;")
    public R insertDefaultType(@PathVariable Integer dcDoccId){
        return dmDoccService.insertDefaultType(dcDoccId,cloudUser);
    }

    /**
     * 取消默认文档类型
     */
    @GetMapping(value = "/updateDefaultType/{dcDoccId}")
    @ApiOperation(value = "新增默认文档类型", notes = "传入参数为文档类型id;")
    public R updateDefaultType(@PathVariable Integer dcDoccId){
        return dmDoccService.updateDefaultType(dcDoccId,cloudUser);
    }

    /**
     * 获取文档类型代号
     * @return
     */
    @GetMapping(value = "/getDocTypeCode")
    public String getDocTypeCode() {
        return dmDoccService.getDocTypeCode();
    }
}
